package com.ljy.generator;

import com.ljy.model.MainTemplateConfig;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import lombok.val;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 动态模板生成
 */
public class DynamicGenerator {
    public static void main(String[] args) throws IOException, TemplateException {
        String projectPath = System.getProperty("user.dir");
        System.out.println(projectPath);
        String inputPath = projectPath + File.separator + "code-generator-basic" + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "templates" + File.separator + "MainTemplate.java.ftl";
        String outputPath = projectPath + File.separator + "MainTemplate.java";
        MainTemplateConfig mainTemplateConfig = new MainTemplateConfig();
        mainTemplateConfig.setAuthor("ljy");
        mainTemplateConfig.setLoop(false);
        mainTemplateConfig.setOutputText("求和结果：");
        doGenerate(inputPath, outputPath, mainTemplateConfig);
    }


    /**
     * 生成文件
     *
     * @param inputPath 模板文件输入路径
     * @param outputPath 输出路径
     * @param model 数据模型
     * @throws IOException
     * @throws TemplateException
     */
    public static void doGenerate(String inputPath, String outputPath, Object model) throws IOException, TemplateException {
        // new 出 Configuration 对象，参数为 FreeMarker 版本号
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_32);

        // 指定模板文件所在的路径
        File templateDir = new File(inputPath).getParentFile();
        configuration.setDirectoryForTemplateLoading(templateDir);

        // 设置模板文件使用的字符集
        configuration.setDefaultEncoding("utf-8");

        // 创建模板对象，加载指定模板
        String templateName = new File(inputPath).getName();
        Template template = configuration.getTemplate(templateName);

        // 生成
        Writer out = new FileWriter(outputPath);
        template.process(model, out);

        // 关闭流
        out.close();
    }
    //初始版本
//    public static void main(String[] args) throws IOException, TemplateException {
//        // new 出 Configuration 对象，参数为 FreeMarker 版本号
//        Configuration configuration = new Configuration(Configuration.VERSION_2_3_32);
//
//        String userHome = System.getProperty("user.dir");
//        String templatePath = userHome + File.separator + "code-generator-basic";
//        File parentfile = new File(templatePath);
//        File file = new File(parentfile, "src/main/resources/templates");
//
//        // 指定模板文件所在的路径
//        configuration.setDirectoryForTemplateLoading(file);
//
//        // 设置模板文件使用的字符集
//        configuration.setDefaultEncoding("utf-8");
//
//        // 创建模板对象，加载指定模板
//        Template template = configuration.getTemplate("MainTemplate.java.ftl");
//
//        // 创建数据模型
//        MainTemplateConfig templateConfig = new MainTemplateConfig();
//        templateConfig.setAuthor("ljy");
//        templateConfig.setLoop(true);
//        templateConfig.setOutputText("输出结果");
//        // 输出文件
//        Writer out = new FileWriter("MainTmeplate.java");
//
//        // 合并模板和数据模型
//        template.process(templateConfig, out);
//
//        // 关闭流
//        out.close();
//    }
}
